package fr.epsi.game;

import fr.epsi.game.data.ButtonState;
import fr.epsi.game.data.Coordonnee;
import fr.epsi.game.data.Status;

public interface GameModel {
	/**
	 * Recupere l'etat d'un bouton a la coordonnee passee en parametre
	 * 
	 * @param coord
	 *            La coordonnee
	 * @return Le statut du bouton
	 */
	ButtonState get(Coordonnee coord);

	/**
	 * Recupere l'etat d'un bouton a la coordonnee passee en parametre
	 * 
	 * @param int La coordonnee de la ligne
	 * @param int La coordonnee de la colonne
	 * @return Le statut du bouton
	 */
	ButtonState get(int ligne, int colonne);

	/**
	 * Retourne le statut du jeu
	 * 
	 * @return the status
	 */
	Status getStatus();

	/**
	 * Change le statut du jeu et notifie les listener associes
	 * 
	 * @param status
	 *            the status to set
	 */
	void setStatus(Status status);

	/**
	 * Change l'etat d'un bouton et notifie les listeners associes
	 * 
	 * @param coord
	 *            La coordonnee du bouton
	 * @param state
	 *            Le nouvel etat du bouton
	 */
	void setButtonState(Coordonnee coord, ButtonState state);

	/**
	 * Retourne les dimensions de la grilles sous forme de coordonnees
	 * 
	 * @return Les coordonnees representant la grille
	 */
	Coordonnee getDimensionGrille();

	/**
	 * Renseigne le model sur le signe de l'utilisateur (X ou O) et le status du
	 * jeu
	 * 
	 * @param state
	 */
	void setMonState(ButtonState state);
}
